package com.ask.forMe.langchain4j.service;

import dev.langchain4j.data.document.Document;
import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
import dev.langchain4j.data.document.parser.apache.pdfbox.ApachePdfBoxDocumentParser;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.store.embedding.EmbeddingStoreIngestor;
import dev.langchain4j.store.embedding.inmemory.InMemoryEmbeddingStore;
import org.springframework.stereotype.Service;

@Service
public class RAGService {
    /**
     * 默认txt加载器
     *
     * @param filePath
     */
    public void testReadDocument(String filePath) {
        //使用FileSystemDocumentLoader读取指定目录下的知识库文档
        //并使用默认的文档解析器TextDocumentParser对文档进行解析
        Document document = FileSystemDocumentLoader.loadDocument(filePath);
        System.out.println(document.text());
    }

    /**
     * PDF加载与解析器
     *
     * @param filePath
     */
    public void parsePDF(String filePath) {
        Document document = FileSystemDocumentLoader
                .loadDocument(filePath, new ApachePdfBoxDocumentParser());
        System.out.println(document);
    }

    /**
     * 测试向量转换和向量存储
     *
     * @param filePath
     */
    public void testReadDocumentAndStore(String filePath) {
        // 从指定路径加载文档
        Document document = FileSystemDocumentLoader.loadDocument(filePath);
        // 创建向量嵌入的存储容器
        InMemoryEmbeddingStore<TextSegment> embeddingStore = new InMemoryEmbeddingStore<>();
        // 将文档内容转换为 文本段落嵌入向量
        EmbeddingStoreIngestor.ingest(document, embeddingStore);
        System.out.println(embeddingStore);
    }

}
